package com.tfjybj.itoo.teach.provider.service;

//import com.baomidou.mybatisplus.extension.service.IService;

import com.dmsdbj.itoo.tool.base.service.BaseServicePlus;
import com.dmsdbj.itoo.tool.business.ItooResult;
import com.github.pagehelper.PageInfo;
import com.tfjybj.itoo.teach.entity.StudentEntity;
import com.tfjybj.itoo.teach.model.StudentModel;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

//import com.dmsdbj.itoo.tool.base.service.BaseServiceSimplify;
//import com.tfjybj.itoo.teach.template.StudentExportTemplate;


/**
 * StudentService接口
 * student表
 *
 * @author 田成荣
 * @version 2.0.0
 * @since 2.0.0 2018-11-08 19:34:10
 */
public interface StudentService extends BaseServicePlus<StudentEntity> {

    //region 模板生成：模糊查询

    /**
     * 根据姓名模糊查询student
     *
     * @param name     姓名
     * @param pageNo   页码
     * @param pageSize 页数
     * @return 模糊查询的student
     * @author 田成荣
     * @since 2.0.0 2018-11-08 19:34:10
     */
    PageInfo<StudentEntity> queryByLikeName(String name, Integer pageNo, Integer pageSize);
    //endregion

    /* **********************************以下为非模板生成的内容********************************* */

    /**
     * 根据姓名和学号模糊查询student
     *
     * @param name 姓名
     * @param code 学号
     * @return 模糊查询的student集合
     * @author 郄子硕
     * @since 2.0.0 2018-11-17 21:27:48
     */
    PageInfo<StudentModel> queryLikeNameAndCode(String name, String code, Integer pageNo, Integer pageSize);

    /**
     * 根据学生id集 查询学生集和
     *
     * @param ids ids
     * @return ItooResult 学生表List
     * @author 郄子硕
     * @since 2.0.0 2018-11-23 20:45:15
     */
    List<StudentModel> queryStudentByIds(@Param("list") List<String> ids);
    /**
     * 根据班级id集 查询学生集和
     *
     * @param ids ids
     * @return ItooResult 学生表List
     * @author 郄子硕
     * @since 2.0.0 2018-11-29 19:11:34
     */
    PageInfo<StudentModel> queryStudentByByClassIds(@Param("list") List<String> ids, Integer pageNo, Integer pageSize);
    /**
     * 根据专业id集 查询学生集和
     *
     * @param ids ids
     * @return ItooResult 学生表List
     * @author 郄子硕
     * @since 2.0.0 2018-11-29 19:11:37
     */
    PageInfo<StudentModel> queryStudentByByProfessionIds(@Param("list") List<String> ids, Integer pageNo, Integer pageSize);
    /**
     * 根据学院id集 查询学生集和
     *
     * @param ids ids
     * @return ItooResult 学生表List
     * @author 郄子硕
     * @since 2.0.0 2018-11-29 19:11:40
     */
    PageInfo<StudentModel> queryStudentByAcademyIds(@Param("list") List<String> ids, Integer pageNo, Integer pageSize);


    /**
     * 根据姓名和学号模糊查询student
     *
     * @param name     姓名
     * @param code     姓名
     * @param classId  行政班Id
     * @param pageNo   页码
     * @param pageSize 页数
     * @return 模糊查询的student
     * @author 郄子硕
     * @since 2.0.0 2018-11-17 21:23:58
     */
    PageInfo<StudentModel> queryLikeNameAndCodeAndClassId(String name, String code, String classId, Integer pageNo, Integer pageSize);

    /**
     * 根据行政班id查询student
     *
     * @param classId 行政班id
     * @return 查询的student
     * @author 郄子硕
     * @since 2.0.0 2018-11-13 21:47:30
     */
    PageInfo<StudentModel> queryStudentInfoByClassId(String classId, Integer pageNum, Integer pageSize);


    PageInfo<StudentModel> queryAllStudent(Integer pageNum, Integer pageSize);

    /**
     * 根据id查询student
     *
     * @param studentId studentId
     * @return 查询的student
     * @author 郄子硕
     * @since 2.0.0 2018-11-13 21:47:30
     */
    PageInfo<StudentModel> queryStudentInfoByStudentId(String studentId);

    /**
     * 根据关键词模糊查询学号或姓名student
     *
     * @param strLike 姓名或学号关键词
     * @return 查询的student
     * @author 郄子硕
     * @since 2.0.0 2018-11-15 14:20:45
     */
    PageInfo<StudentModel> queryStudentInfoByCodeAndNameStrLike(Integer pageNum, Integer pageSize, String strLike);

    /**
     * 根据classId和关键词模糊查询学号或姓名student
     *
     * @param strLike 姓名或学号关键词
     * @param classId 行政班Id
     * @return 查询的student
     * @author 郄子硕
     * @since 2.0.0 2018-11-21 15:01:03
     */
    PageInfo<StudentModel> queryByCodeNameAndClassId(String strLike, String classId, Integer pageNum, Integer pageSize);

    /**
     * 根据classID集合 查询学生信息
     *
     * @param ids ids
     * @return StudentModel
     * @author 郄子硕
     * @since 2.0.0 2018-11-15 15:44:38
     */
    List<StudentModel> queryStudentInfoByClassIds(@Param("list") List<String> ids);


    /**
     * 根据学生code查询学生信息
     *
     * @param code
     * @return
     * @author 严文文
     * @since 2.0.0 2018-11-27 11:30:45
     */
    List<StudentModel> queryStudentByCode(String code);


    /**
     * 导出
     *
     * @param response
     * @param strLike
     * @param studentCode
     * @param studentName
     * @return
     * @author 郄子硕
     * @since 2018-11-27 11:31:59
     */
    ItooResult exportStudentInfo(HttpServletResponse response, String strLike, String studentCode, String studentName);


    /**
     * 下载模板-导入用
     *
     * @param response
     * @return 下载成功或失败
     * @author 郄子硕
     * @since 2018-11-27 20:42:13
     */
    Boolean downTemplate(HttpServletResponse response);

    /**
     * 导入学生信息
     *
     * @param multipartFile 批量导入的文件
     * @param request       请求
     * @param response      响应
     * @return itooresult 批量导入的结果
     * @author 郄子硕
     * @since 2018-11-28 19:32:52
     */
    ItooResult importStudent(MultipartFile multipartFile, HttpServletRequest request, HttpServletResponse response);


    /**
     * 导入学生信息
     *
     * @param multipartFile 批量导入的文件
     * @param request       请求
     * @param response      响应
     * @return itooresult 批量导入的结果
     * @author 郄子硕
     * @since 2018-11-28 19:32:52
     */
    ItooResult importStudentTGB(MultipartFile multipartFile, HttpServletRequest request, HttpServletResponse response);

    /**
     * 导出错误数据
     *
     * @param response 响应
     * @param errorListId 为成功导入的分组id
     * @return 学生信息model
     * @author 郄子硕
     * @since 2018-12-2 12:44:18
     */
    boolean downErrorList(String errorListId, HttpServletResponse response);


    /**
     * 查询所有Student
     *
     * @author 严文文
     * @since 2.0.0 2018-12-3 17:56:32
     */
    List<StudentModel> queryAll(String gradeId);

    /**
     * 添加角色信息
     *
     * @author 郄子硕
     * @since 2.0.0 2018-12-9 20:23:25
     */
    boolean addToAuth(StudentEntity studentEntity);
}

